/**
 * 
 */
package fr.gfi.agraf.utils;

import java.util.Locale;

import org.apache.log4j.Logger;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.support.ResourceBundleMessageSource;

/**
 * @author Zakaria
 * 
 */
public final class PropertiesUtils {

	private static final String MESSAGE_NON_TROUVE = "Message non trouvé";
	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger
			.getLogger(PropertiesUtils.class);
	/**
	 * ResourceBundle
	 */
	private static ResourceBundleMessageSource messageSource;

	/**
	 * 
	 */
	private PropertiesUtils() {

	}

	/**
	 * Initialise le Resource bundle
	 * 
	 */
	private static void initResources() {
		if (messageSource == null) {
			messageSource = new ResourceBundleMessageSource();
			messageSource.setBasenames("messages/messages", "messages/erreurs",
					"database/requetes", "technique/technical");
		}
	}

	/**
	 * Recupere une property, retourne le code s'il ne retrouve pas la property
	 * 
	 * @param code
	 * @param args
	 * @param locale
	 * @return
	 */
	public static String getProperty(final String code, final Object... args) {
		initResources();
		if (args == null) {
			return getProperty(code);
		}
		String message;
		try {
			message = messageSource.getMessage(code, args, new Locale("fr"));
		} catch (final NoSuchMessageException me) {
			message = code;
			LOGGER.error(MESSAGE_NON_TROUVE, me);
		}
		return message;
	}

	/**
	 * Recupere une property, retourne le code s'il ne retrouve pas la property
	 * 
	 * @param code
	 * @param args
	 * @param locale
	 * @return
	 */
	public static String getProperty(final String code) {
		initResources();
		String message;
		try {
			message = messageSource.getMessage(code, null, new Locale(""));
		} catch (final NoSuchMessageException me) {
			message = "";
			LOGGER.error(MESSAGE_NON_TROUVE, me);
		}
		return message;
	}

}
